package drazing;

import java.io.Serializable;
import java.text.NumberFormat;

/**
 * Clase para el manejo de tiempos
 * @author xcubo
 */
public class Tiempo implements Serializable
{
    private int horas, minutos, segundos, centesimas;

    public Tiempo(int h, int m, int s, int c)
    {
        horas = h;
        minutos = m;
        segundos = s;
        centesimas = c;
    }

    /**
     * Pasa una centesima
     */
    public void past()
    {
        centesimas++;
        if(centesimas==100) { centesimas=0;segundos++;}
        if(segundos==60) { segundos=0; minutos++; }
        if(minutos==60) { minutos=0; horas++; }
        
    }
    /**
     * Devuelve el valor en String
     * @return Tiempo en String
     */
    @Override
    public String toString()
    {
        NumberFormat duo = NumberFormat.getInstance();
        duo.setMinimumIntegerDigits(2);

        return duo.format(horas)+":"+duo.format(minutos)+":"+duo.format(segundos)+":"+duo.format(centesimas);
    }

    /**
     * Devuelve el valor en segundos
     * @return segundos
     */
    public double toSeconds()
    {
        return (horas*60*60)+(minutos*60)+segundos+((double)centesimas/100);
    }
    public int getHours()
    {
        return horas;
    }
    public int getMinutes()
    {
        return minutos;
    }
    public int getSeconds()
    {
        return segundos;
    }
    public int getCents()
    {
        return centesimas;
    }
    /**
     * Pone el tiempo en 0
     */
    public void toZero()
    {
        horas = 0;
        minutos = 0;
        segundos = 0;
        centesimas = 0;
    }
    /**
     * Establece el tiempo en segundos
     * @param sec Segundos
     */
    public void setSeconds(double sec)
    {
        double aux = (sec - (int)sec);
        centesimas = (int)(aux*100);
        horas = (int)((sec-aux) / 3600);
        aux = horas*3600;
        minutos = (int)((sec - aux) / 60);
        aux = aux + minutos*60;
        segundos = (int)(sec - aux);
    }
    public boolean equals(Tiempo tmp)
    {
        if(this.toSeconds() == tmp.toSeconds())
            return true;
        else
            return false;
    }

    public boolean minor(Tiempo tmp)
    {
        if(this.toSeconds() < tmp.toSeconds())
            return true;
        else
            return false;
    }

    public boolean major(Tiempo tmp)
    {
        if(this.toSeconds() > tmp.toSeconds())
            return true;
        else
            return false;
    }
    public boolean isZero()
    {
        if (this.toSeconds() == 0)
            return true;
        else
            return false;
    }

}
